package studia.figlewicz.math.library;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Set;

public class TrajektoriaProcesu {
	
	private Set<PunktTrajektorii> punktyTrajektorii;
	
	
	// konstruktory
	public TrajektoriaProcesu() {
		punktyTrajektorii = new LinkedHashSet<PunktTrajektorii>();
	}
	public TrajektoriaProcesu(LinkedHashMap<Date, Double> punkty) {
		punktyTrajektorii = new LinkedHashSet<PunktTrajektorii>();
		for (Date d : punkty.keySet()) {
			punktyTrajektorii.add(new PunktTrajektorii(d, punkty.get(d)));
		}
	}
	
	
	// metody
	public boolean dodajPunktTrajektorii(PunktTrajektorii punkt) {
		return punktyTrajektorii.add(punkt);
	}
	public PunktTrajektorii poczatekTrajektorii() {
		PunktTrajektorii resoult = null;
//		Date maxTemp = punktyTrajektorii.get(0).getData();
		for (PunktTrajektorii punkt : punktyTrajektorii) {
			if (resoult == null)
				resoult = punkt;
			if (punkt.before(resoult.getData()))
				resoult = punkt;
		}
		return resoult;
	}
	public PunktTrajektorii koniecTrajektorii() {
		PunktTrajektorii resoult = null;
//		Date maxTemp = punktyTrajektorii.get(0).getData();
		for (PunktTrajektorii punkt : punktyTrajektorii) {
			if (resoult == null)
				resoult = punkt;
			if (punkt.after(resoult.getData()))
				resoult = punkt;
		}
		return resoult;
	}
	public Double znajdzWartosc(Date data) {
		Double resoult = null;
		resoult = znajdzPunkt(data).getWartosc();
		return resoult;
	}
	public Double znajdzWartoscDoWyceny(Date data) {
		Double resoult = null;
		resoult = znajdzPunkt(data).getWartosc();
		return resoult;
	}
	public PunktTrajektorii znajdzPunkt(Date data) {
		PunktTrajektorii punkt = null;
		
		for (PunktTrajektorii pkt : punktyTrajektorii) {
			if (pkt.getData().equals(data)) {
				punkt = pkt;
				break;
			}
		}
		return punkt;
	}
	public int dlugoscTrajektorii() {
		return punktyTrajektorii.size();
	}
	public Date pierwszyTermin() {
		PunktTrajektorii resoult = poczatekTrajektorii();
		return resoult.getData();
	}
	public Date ostatniTermin() {
		PunktTrajektorii resoult = koniecTrajektorii();
		return resoult.getData();
	}
	public LinkedHashMap<Date, Double> getPukntySymulacji() {
		LinkedHashMap<Date, Double> resoult = new LinkedHashMap<Date, Double>();
		for (PunktTrajektorii pt : punktyTrajektorii)
			resoult.put(pt.getData(),pt.getWartosc());
		return resoult;
	}

}
 
